Historically, gaming machines have always been monolithic. That is, they have a single central processing unit (CPU) running a single block of software and/or firmware that controlled all the hardware directly. Some hardware devices have a micro-controller in them to perform tasks for an explicit hardware function, but the game CPU to hardware interface is still monolithic in nature. An example of two smart devices that are controlled by the single game CPU are the following: U.S. Pat. No. 5,190,495 to Taxon and assigned to Bally Manufacturing Corp. for a high capacity coin hopper for a gaming machine, which uses traditional control lines as if it were a non-intelligent hopper. U.S. Pat. No. 5,420,406 to Izawa et al, and assigned to Japan Cash Machine Co., Ltd., which discloses a bill acceptor that requires a micro-controller to perform the operation of validating currency, but is interfaced via a dedicated serial port. The software to talk to these hardware devices would, generally, always be included in the software block that runs on the game CPU, whether or not that device was connected to the game. This static approach affects the CPU layout, since the input/output (I/O) is included on the CPU board, and it affects the design of the software that runs on the CPU. The resulting method of integrating the software to the hardware on a monolithic CPU makes the software monolithic, harder to add new interfaces to hardware and harder to maintain existing code. By adding an extra level of intelligence to the hardware devices to allow them to be abstracted, such as in NuGame's U.S. Patent Application 0015 1 973 992 4643, for an I/O Interface and Device Abstraction, filed 24 Jul., 1998, the software (which runs on the game CPU) can be modified to allow for dynamic hardware connections. This extra level of intelligence permits the developer to write interfacing software modules that are both smaller and easier to debug and maintain. In addition, properly abstracted hardware can be hot-swapped since the software will automatically load the right driver and make the connection to the new hardware.